package core;

import java.util.ArrayList;

import core.compagnie.CompAerienne;
import core.vols.PlanDeVol;
import core.vols.VolInstance;
import core.voyageur.Client;


public class Avion {
        
        private CompAerienne compagnie;
        private PlanDeVol planDeVol;
        private ArrayList<Client> passagers;
        
        private String nom;
        private int capacite;
        private int nbPassagers;
        private int consommation; //Litres aux 100km/passager
        private int carburant;
        private int nbPlacesC1;
        private int nbPlacesAff;
        private int nbPlacesEco;
        private int carburantMax;
        
        //private Modele modele;
        
        /**
         * @param compagnie
         * @param planDeVol
         * @param nom
         * @param capacite
         * @param consommation
         * @param nbPlacesC1
         * @param nbPlacesAff
         * @param nbPlacesEco
         */
        public Avion(CompAerienne compagnie, PlanDeVol planDeVol, String nom, int consommation, int carburantMax, int nbPlacesC1, int nbPlacesAff, int nbPlacesEco) {
                super();
                this.compagnie = compagnie;
                this.planDeVol = planDeVol;
                this.nom = nom;
                this.consommation = consommation;
                this.nbPlacesC1 = nbPlacesC1;
                this.nbPlacesAff = nbPlacesAff;
                this.nbPlacesEco = nbPlacesEco;
                this.capacite = nbPlacesAff + nbPlacesC1 + nbPlacesEco;
                carburant=carburantMax;
                this.carburantMax = carburantMax;
                nbPassagers=0;
                passagers = new ArrayList<Client>();
                planDeVol = null;
        }
        
        /**
         * @param compagnie
         * @param planDeVol
         * @param nom
         * Constructeur raccourci avec valeurs par défaut
         */
        public Avion(CompAerienne compagnie, String nom) {
                super();
                this.compagnie = compagnie;
                this.planDeVol = null;
                this.nom = nom;
                this.capacite = 1;
                this.consommation = 4;
                this.nbPlacesC1 = 30;
                this.nbPlacesAff = 50;
                this.nbPlacesEco = 180;
                carburantMax=8000;
                carburant=carburantMax;
                nbPassagers=0;
                passagers = new ArrayList<Client>();
                planDeVol = null;
        }

        public void setPlanDeVol(PlanDeVol planDeVol) {
                this.planDeVol = planDeVol;
        }

		/**
		 * @return the compagnie
		 */
		public CompAerienne getCompagnie() {
			return compagnie;
		}

		public String getNom() {
			return nom;
		}

		public PlanDeVol getPlanDeVol() {
			return planDeVol;
		}
               
		public void doFlight(VolInstance v) {
			carburant = carburant - (consommation*nbPassagers)*((int)v.getDistance()/100);
		}
		
		public int calculateCarburant(VolInstance v) {
			return (consommation*capacite)*((int)v.getDistance()/100);
		}
		
		public void aterrissage(VolInstance v) {
			if(passagers.size() != 0) {
				Output.imprimer(planDeVol.getVolIndice(0)+ ": Aterrissage...");
				Output.imprimer("Descente des passagers :"+passagers.toString());
			}
			planDeVol.removeVol(0);
			if(!planDeVol.getListeVol().isEmpty()) {
				if(calculateCarburant(planDeVol.nextVol()) < carburant) ravitailler();
			}
			viderAvion();
		}
		
		public void ravitailler() {
			carburant=carburantMax;
			Output.imprimer(this.toString()+ " ravitaillement en cours...");
		}
		
		public void addPassager (Client p) {
			passagers.add(p);
			nbPassagers++;
		}
		
		public void viderAvion () {
			passagers.removeAll(passagers);
			nbPassagers = 0;
		}
		
		public boolean estPlein () {
			return nbPassagers >= capacite;
		}
		
		public void setPlein() {
			nbPassagers = capacite;
		}
		
		public String toString() {
			return nom;
		}

		/**
		 * @return the passagers
		 */
		public ArrayList<Client> getPassagers() {
			return passagers;
		}

		/**
		 * @return the nbPassagers
		 */
		public int getNbPassagers() {
			return nbPassagers;
		}
		
		

}
